#! /bin/sh
#
# helps bootstrapping, when checked out from CVS
# requires GNU autoconf and GNU automake
#
# $Id: bootstrap,v 1.24 2006/11/18 06:07:06 ralf Exp $

# this is not meant to be exported outside the source tree

# NOTE: Inspired by libtool's autogen script

# to be run from the toplevel directory of RTEMS'
# source tree

progname=`basename $0`
top_srcdir=`dirname $0`

verbose="";
quiet="false"
mode="generate"

usage()
{
  echo
  echo "usage: ${progname} [-c|-p|-h] [-q][-v]"
  echo
  echo "options:"
  echo "	-c .. clean, remove all aclocal/autoconf/automake generated files"
  echo "	-h .. display this message and exit"
  echo "	-p .. regenerate preinstall.am files"
  echo "	-q .. quiet, don't display directories"
  echo "	-v .. verbose, pass -v to autotools"
  echo
  exit 1;
}

generate_bspdir_acinclude()
{
cat << EOF > acinclude.m4~
# RTEMS_CHECK_BSPDIR(RTEMS_BSP_FAMILY)
AC_DEFUN([RTEMS_CHECK_BSPDIR],
[
  case "\$1" in
EOF

for i in */bsp_specs; do
  d=`dirname $i`
cat << EOF >> acinclude.m4~
  $d )
    AC_CONFIG_SUBDIRS([$d]);;
EOF
done
cat << EOF >> acinclude.m4~
  *)
    AC_MSG_ERROR([Invalid BSP]);;
  esac
])
EOF
if cmp -s acinclude.m4 acinclude.m4~ 2>/dev/null; then
  echo "acinclude.m4 is unchanged";
else
  cp acinclude.m4~ acinclude.m4
fi
rm -f acinclude.m4~
}

if test ! -f $top_srcdir/aclocal/version.m4; then
  echo "${progname}:"
  echo "	Installation problem: Can't find file aclocal/version.m4"
  exit 1;
fi

while test $# -gt 0; do
case $1 in
-h|--he|--hel|--help)
  usage ;;
-q|--qu|--qui|--quie|--quiet)
  quiet="true";
  shift;;
-v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
  verbose="-v";
  shift;;
-c|--cl|--cle|--clea|--clean)
  mode="clean";
  shift;;
-p|--pr|--pre|--prei|--prein|--preins|--preinst)
  mode="preinstall";
  shift;;
-r|--re|--rec|--reco|--recon|--reconf)
  mode="autoreconf";
  shift;;
-*) echo "unknown option $1" ;
  usage ;;
*) echo "invalid parameter $1" ;
  usage ;;
esac
done

case $mode in
preinstall)
  confs=`find -name Makefile.am -exec grep -l 'include .*/preinstall\.am' {} \;`
  for i in $confs; do
    dir=$(dirname $i);
    test "$quite" = "true" || echo "Generating $dir/preinstall.am"
    ${top_srcdir}/ampolish3 "$dir/Makefile.am" > "$dir/preinstall.am"
  done
  ;;

generate)
  AUTOCONF=${AUTOCONF-autoconf}
  if test -z "$AUTOCONF"; then
    echo "You must have autoconf installed to run $program"
    exit 1
  fi
  
  AUTOHEADER=${AUTOHEADER-autoheader}
  if test -z "$AUTOHEADER"; then
    echo "You must have autoconf installed to run $program"
    exit 1
  fi
  
  AUTOMAKE=${AUTOMAKE-automake}
  if test -z "$AUTOMAKE"; then
    echo "You must have automake installed to run $program"
    exit 1
  fi
  
  ACLOCAL=${ACLOCAL-aclocal}
  if test -z "$ACLOCAL"; then
    echo "You must have automake installed to run $program"
    exit 1
  fi

  case $top_srcdir in
  /* ) aclocal_dir=$top_srcdir
    ;;
  *) aclocal_dir=`pwd`/$top_srcdir
    ;;
  esac

  confs=`find . \( -name 'configure.in' -o -name 'configure.ac' \) -print`
  for i in $confs; do
  dir=`dirname $i`;
  configure=`basename $i`;
  ( test "$quiet" = "true" || echo "$dir";
    cd $dir;
    test -n "`grep RTEMS_CHECK_BSPDIR ${configure}`" && \
      generate_bspdir_acinclude;
    pat="s,\$(RTEMS_TOPdir),${aclocal_dir},g"
    aclocal_args=`grep '^[ ]*ACLOCAL_AMFLAGS' Makefile.am | \
      sed -e 's%.*ACLOCAL_AMFLAGS.*\=[ ]*%%g' -e $pat ` ;
    test "$verbose" = "-v" && echo "${ACLOCAL} $aclocal_args"
    ${ACLOCAL} $aclocal_args;
    test -n "`grep CONFIG_HEADER ${configure}`" && ${AUTOHEADER} \
      && test "$verbose" = "-v" && echo "${AUTOHEADER}";
    test -n "`grep RTEMS_BSP_CONFIGURE ${configure}`" && ${AUTOHEADER} \
      && test "$verbose" = "-v" && echo "${AUTOHEADER}";
    test -f Makefile.am && ${AUTOMAKE} -a -c $verbose ;
    ${AUTOCONF};
    test -f Makefile.am && test -n "`grep 'stamp-h\.in' Makefile.in`" \
      && echo timestamp > stamp-h.in
  )
  done
  ;;

autoreconf)
  AUTORECONF=${AUTORECONF-autoreconf}
  if test -z "$AUTORECONF"; then
    echo "You must have autoreconf installed to run $program"
    exit 1
  fi

  confs=`find . -name 'configure.ac' -print`
  for i in $confs; do
  dir=`dirname $i`;
  configure=`basename $i`;
  ( test "$quiet" = "true" || echo "$dir";
    cd $dir;
    test -n "`grep RTEMS_CHECK_BSPDIR ${configure}`" && \
      generate_bspdir_acinclude;
    ${AUTORECONF} -i --no-recursive $verbose;
    test -f Makefile.am && test -n "`grep 'stamp-h\.in' Makefile.in`" \
      && echo timestamp > stamp-h.in
  )
  done
  ;;

clean)
  test "$quiet" = "true" || echo "removing automake generated Makefile.in files"
  files=`find . -name 'Makefile.am' -print | sed -e 's%\.am%\.in%g'` ;
  for i in $files; do if test -f $i; then
    rm -f $i
    test "$verbose" = "-v" && echo "$i"    
  fi; done

  test "$quiet" = "true" || echo "removing configure files"
  files=`find . -name 'configure' -print` ;
  test "$verbose" = "-v" && test -n "$files" && echo "$files" ;
  for i in $files; do if test -f $i; then
    rm -f $i config.sub config.guess depcomp install-sh mdate-sh missing \
	mkinstalldirs texinfo.tex compile
    test "$verbose" = "-v" && echo "$i"    
  fi; done
  
  test "$quiet" = "true" || echo "removing aclocal.m4 files"
  files=`find . -name 'aclocal.m4' -print` ;
  test "$verbose" = "-v" && test -n "$files" && echo "$files" ;
  for i in $files; do if test -f $i; then
    rm -f $i
    test "$verbose" = "-v" && echo "$i"    
  fi; done

  find . -name '*~' -print | xargs rm -f
  find . -name 'bspopts.h.in' -print | xargs rm -f
  find . -name '*.orig' -print | xargs rm -f
  find . -name '*.rej' -print | xargs rm -f
  find . -name 'config.status' -print | xargs rm -f
  find . -name 'config.log' -print | xargs rm -f
  find . -name 'config.cache' -print | xargs rm -f
  find . -name 'Makefile' -print | xargs rm -f
  find . -name '.deps' -print | xargs rm -rf
  find . -name '.libs' -print | xargs rm -rf
  find . -name 'stamp-h.in' | xargs rm -rf
  find . -name 'autom4te*.cache' | xargs rm -rf
  ;;
esac

exit 0
